明天又要上班啦 今天研究了許多的東西 卡了一陣子
原本想說一口氣要將配置改成 Spring Data REST 來建構 RESTful Web Service 不過要做的話可是要花費一番功夫,因為有些地方會讓編譯執行的時候發生衝突導致無法開啟我們的服務
我還是先用@RestController
來建構我們的RESTful Web Service,如果你已經知道Spirng Data REST項目的話,那你是否跟我一樣剛開始在使用的時候發生了很多問題呢XDD
這篇沒要介紹Spring Data REST
今天只是實作面的設計,對於程式碼的部分只提重點部分,如果有想到要補充的地方會再補上來
由Richardson博士提出的RESTful Web Service的設計風格,將REST分成了0~3個層級模型
層級 | 敘述 |
---|---|
Level 0 | Http層-只需讓資源透過Http協定獲取可使用任何數據表達形式(EX:XML,JSON) |
Level 1 | 資源層-資源與一個統一資源識別URL進行關聯 ex:/users包含所有用戶 /user/42包含特定用戶 |
Level 2 | 動作-主要動作有GET,PUT,DELETE,POST等其他動作 描述這API能完成什麼功能 |
Level 3 | 超媒體控制-透過超文本鏈結即可運行服務(EX:google map) |
package com.tutorial.Controller;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.tutorial.Dao.MemberApiRepository;
import com.tutorial.Model.Memberaccount;
@RestController
@RequestMapping("/memberApi")
public class MemberApiController {
@Autowired
MemberApiRepository memberapiRepository;
@RequestMapping(value="/{id}")
public Optional<Memberaccount> read(@PathVariable long id) {
return memberapiRepository.findById(id);
}
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
public void create(@RequestBody Memberaccount memberaccount) {
memberapiRepository.save(memberaccount);
}
@RequestMapping(method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE)
public void update(@RequestBody Memberaccount memberaccount) {
memberapiRepository.save(memberaccount);
}
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
public void delete(@PathVariable long id) {
memberapiRepository.deleteById(id);
}
}
package com.tutorial.Model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Memberaccount{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
private String email;
private String cellphone;
private String password;
private String address;
public Memberaccount() {
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getCellphone() {
return cellphone;
}
public void setCellphone(String cellphone) {
this.cellphone = cellphone;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
package com.tutorial.Dao;
import org.springframework.data.jpa.repository.JpaRepository;
import com.tutorial.Model.Memberaccount;
public interface MemberApiRepository extends JpaRepository<Memberaccount, Long>{
//Memberaccount findByIdStartsWith(String id);
}
(https://read01.com/xOL668.html )
CRUD中每種方法都有對應的HTTP Method(請求方法)定義在HTTP協定當中,
1.GET-只做訪問請求資源
2.POST-新增資源
3.PUT-修改資源
4.DELETE-刪除資源
MemberApiRepository
中沒有任何實作因為我們都只使用繼承JpaRepository
而來的方法
Memberaccount
中id
要使用為long這是JpaRepository
已經定義接受的型態,如果要自定義為int則要客製化自己的Query否則型態轉換會報錯
Memberaccount
中id
要使用為long
這是JpaRepositor
y可以修改為你要的型態在extends
JpaRepository<Memberaccount, Long>
中,ex: JpaRepository<Memberaccount, Integer>
如果你是用MySQL 或MariaDB 在Model // @GeneratedValue(strategy=GenerationType.AUTO)
這行可以不需要註解掉因為MySQL中並沒有Sequence,MySQL可以裡直接設定ID的AI就能使用了
下一篇
如何使用ARC Client來請求REST 資源
Memberaccount.java
@Entity
下面給個
@Table(name = "member_account")
不然明天的文章會出現500
若有錯懇請告知
感謝寫文章的大大